package com.demo.java.OD601_650.OD627;

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【优选核酸检测点(A卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146885374
 */
public class OdMain {
    // 核酸点结构
    public static class Point {
        int id; // 核酸点ID
        int dis; // 距离
        int que; // 排队人数
        int pay; // 总花费金钱
        int time; // 总花费时间
    }

    // 每个时间段的人数变化情况
    public static final int[] add8_10 = {3, 480, 600}; // 8:00-10:00
    public static final int[] add12_14 = {10, 720, 840}; // 12:00-14:00

    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        // 先将时间转换为分钟数
        int start = in.nextInt() * 60 + in.nextInt();
        int end = in.nextInt() * 60 + in.nextInt();
        int n = in.nextInt(); // 核酸点的数量

        // 构造核酸点
        Point[] points = new Point[n];
        for (int i = 0; i < points.length; i++) {
            Point point = new Point();
            point.id = in.nextInt(); // 核酸点ID
            point.dis = in.nextInt(); // 距离
            point.que = in.nextInt(); // 排队人数
            point.pay = point.dis * 10; // 总费用 = 距离 * 10
            // 计算总耗时
            point.time = cal_time(start, point);
            points[i] = point;
        }

        // 按照给定的三条规则排序
        List<Point> res = Arrays.stream(points).filter(p -> start + p.time < end) // 过滤超时的点
                .sorted((p1, p2) -> {
                    if (p1.time != p2.time) {
                        return p1.time - p2.time; // 优先排序总耗时
                    } else {
                        return p1.pay - p2.pay; // 耗时相同的情况下，按费用排序
                    }
                }).collect(Collectors.toList());

        System.out.println(res.size()); // 输出符合条件的检测点数量
        for (Point p : res) {
            System.out.print(p.id); // 输出检测点ID
            System.out.print(" ");
            System.out.print(p.time); // 输出总耗时
            System.out.print(" ");
            System.out.println(p.pay); // 输出总费用
        }
    }

    // 计算到达每个核酸点所需的总时间
    public static int cal_time(int start, Point point) {
        int total_time = 0;
        // 路程时间
        total_time += point.dis * 10; // 假设每单位距离花费10分钟
        // 到达监测点的时间
        int on = start + point.dis * 10;

        // 到达时间的分支条件
        if (on <= add8_10[1]) { // 如果到达时间在8:00到10:00之间
            return add8_10[1] - start; // 计算排队的时间
        } else if (on <= add8_10[2]) { // 10:00之前
            point.que += (on - add8_10[1]) * add8_10[0] - (on - add8_10[1]);
            return total_time + point.que; // 总时间 = 路程时间 + 排队时间
        } else if (on <= add12_14[1]) { // 12:00之前
            return total_time + point.que; // 不变的排队时间
        } else if (on <= add12_14[2]) { // 14:00之前
            point.que += (on - add12_14[1]) * add12_14[0] - (on - add12_14[1]);
            return total_time + point.que; // 总时间 = 路程时间 + 排队时间
        } else {
            return total_time + point.que; // 结束后，不再增加排队时间
        }
    }
}